<?php

/*

template source, save in plugins/random_posts.html in your template folder
------ snip ------
<h2>From the archives</h2>
<ul>
  <!-- BEGIN plugin_randomposts_post -->
  <li>
    <a class="menu" href="{option_url}/{plugin_randomposts_post_permalink}">{plugin_randomposts_post_title}</a>
    <br />
    <small>{plugin_randomposts_post_date}</small>
    <p>{plugin_randomposts_post_excerpt}</p>
  </li>
  <!-- END plugin_randomposts_post -->
</ul>
------ snip ------

*/

require_once 'classes/LightPressPlugin.php';

class RandomPosts extends LightPressPlugin {
    
    var $constructor_args = array(
        'date_format'   =>'custom date format',
        'limit'         =>'number of posts to show',
        'category'      =>'restrict to one or more categories, leave empty to use every category, format: cat_id:cat_id:cat_id',
        'excerpt_length'    => "maximum length in words for the excerpt, set to '0' to disable",
        'ignore_excerpt'    => 'ignore the stored excerpt, and always use the post content to generate a new one');
    var $default_context = LP_CONTEXT_ALL;
    var $description = 'Display n random posts';
    
    var $active = true;
    var $hooks = array('sidebar');
    
    var $date_format;
    var $limit = 5;
    var $category = '';
    var $excerpt_length = 25;
    var $ignore_excerpt = false;
    
    function RandomPosts(&$frontend, $args, $dummy_run=false) {
        $this->LightPressPlugin($frontend, $args, $dummy_run);
        
        if (empty($this->excerpt_length))
            $this->excerpt_length = 0;
        else
            $this->excerpt_length = (int)$this->excerpt_length;
        
        $this->category = trim($this->category);
        if (!empty($this->category)) {
            $category = array();
            foreach (explode(':', $this->category) as $cat)
                $category = trim($cat);
            $this->category =& $category;
        }
    }
    
    function run($hook, &$hook_data) {
        
        $frontend =& $this->_frontend;
        
        $tpl =& $frontend->tpl;
        $db =& $frontend->db;
        $date_format = (empty($this->date_format) ? $frontend->options['date_format'] : $this->_date_format);
        
        $tpl->setFile('plugin_randomposts', 'plugins/random_posts.xml');
        
        $q = "select p.id, p.post_title as title, p.post_name as name, unix_timestamp(p.post_date) as tstamp, p.post_category, p.post_content as content, p.post_excerpt as excerpt from {$frontend->tables['posts']} p ";
        $w = '';
        if (is_array($this->category)) {
            $q .= "inner join {$frontend->tables['post2cat']} p2c on p.id=p2c.post_id\n";
            $w = " and p2c.category_id in (" . implode(', ', $this->category) . ")";
        }
        $q .= " where p.post_status='publish' and p.post_date_gmt <= '{$frontend->where_date}' $w order by rand() limit {$this->limit}";

        if (!$db->query($q))
            return $this->hide();
        
        $posts = array();
        foreach ($db->all() as $k => $v) {
            $v['permalink'] = $this->_frontend->getPermalink($v['id'], $v['name'], $v['tstamp'], $v['post_category']);
            $v['date'] = strftime($date_format, $v['tstamp']);
            $v['short_date'] = strftime($frontend->options['short_date_format'], $v['tstamp']);
            if ($this->ignore_excerpt || empty($v['excerpt']))
                $v['excerpt'] = stripslashes($v['content']);
            else
                $v['excerpt'] = stripslashes($v['excerpt']);
            $v['excerpt'] =& $this->_frontend->getExcerpt($v['excerpt'], $this->excerpt_length);
            unset($v['content']);
            $posts[] = $v;
        }
        $tpl->parseBlock('PLUGIN_RANDOMPOSTS_POST', 'plugin_randomposts_post', $posts, 'plugin_randomposts');
        $tpl->parse('PLUGIN_RANDOMPOSTS', 'plugin_randomposts');
    }
    
}

?>